package uri.model.board;

import java.util.HashMap;
import java.util.List;

import javax.annotation.Resource;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

import uri.model.BoardVO;
import uri.model.CommentVO;
import uri.model.FileVO;

@Repository
public class PublicDAOImpl implements PublicDAO {
	
	@Resource(name="sqlSessionTemplate")
	private SqlSessionTemplate sqlSessionTemplate;

	@Override
	public void boardWrite(BoardVO bvo) {
		sqlSessionTemplate.insert("public.boardWrite",bvo);
	}

	@Override
	public void fileUpload(FileVO fvo) {
		sqlSessionTemplate.insert("public.fileUpload",fvo);
	}
	/**
	 * 박현종 6-23 15:10 
	 *  no에 해당하는 게시물의 상세정보를 가져온다.
	 */
	public BoardVO detailBoard(String no){
		return sqlSessionTemplate.selectOne("public.detailBoard",no);
	}
	/**
	 * 박현종 6-23 17:03
	 * no에 해당하는 게시물의 조회수 증가
	 */
	public void hitUp(String no){
		sqlSessionTemplate.update("public.hitUp",no);
	}
	/**
	 * 박현종 6-24 10:15
	 * no에 해당하는 게시물의 모든 댓글 조회
	 */
	public List<CommentVO> getAllComment(String no){
		return sqlSessionTemplate.selectList("public.getAllComment",no);
	}
	
	/**
	 * 박현종 6-24 11:44
	 * 댓글 등록하는 메서드
	 */
	public int writeComment(CommentVO cvo){
		return sqlSessionTemplate.insert("public.writeComment",cvo);
	}
	
	/**
	 * 박현종 6-24 16:23
	 * 댓글 삭제하는 메서드
	 */
	public int deleteComment(String no){
		return sqlSessionTemplate.delete("public.deleteComment",no);
	}
	/**
	 * 박현종 6-26 10:28
	 * nowPage가 null일때 게시글 리스트 조회
	 */
	public List<BoardVO> getPublicBoardListNullPage(){
		return sqlSessionTemplate.selectList("public.getPublicBoardListNullPage");
	}
	
	/**
	 * 박현종 6-26 10:31
	 * nowPage에 해당하는 게시글 리스트 조회
	 */
	public List<BoardVO> getPublicBoardListNowPage(String nowPage){
		return sqlSessionTemplate.selectList("public.getPublicBoardListNowPage",nowPage);
	}
	/**
	 * 박현종 6-26 10:39
	 * 총 게시물의 숫자를 조회
	 */
	public int publicboardTotalCount(){
		return sqlSessionTemplate.selectOne("public.publicboardTotalCount");
	}
	/**
	 * 박현종 6-26 14:41
	 * no에 해당하는 게시물에 존재하는 파일을 모두 반환
	 */
	public List<String> findFileNameByPubNo(String no){
		return sqlSessionTemplate.selectList("public.findFileNameByPubNo",no);
	}
	/**
	 * 박현종 6-26 15:14
	 * no에 해당하는 게시물 삭제
	 */
	public void deleteBoardByPubNo(String no){
		sqlSessionTemplate.delete("public.deleteBoardByPubNo",no);
	}
	/**
	 * 박현종 6-26 17:16
	 * no에 해당하는 org파일이름과 new파일이름을 가져온다. 
	 */
	public List<HashMap> findOrgAndNewFileListByPubNo(String no){
		
		return sqlSessionTemplate.selectList("public.findOrgAndNewFileListByPubNo",no);
	}
	/**
	 * 박현종 6-27 14:59
	 *  no에 해당하는 comment의 content값을 업데이트
	 */
	public int updateComment(HashMap map){
		return sqlSessionTemplate.update("public.updateComment",map);
	}
	/**
	 * 박현종 6-30 10:06
	 * 답글달기 페이지에 표시하기 위해
	 * no에 해당하는 게시물 정보를 가져온다.
	 */
	public BoardVO replyBoardWriteInfo(String no){
		return sqlSessionTemplate.selectOne("public.replyBoardWriteInfo",no);
	}
	/**
	 * 박현종 6-30 10:57
	 * 답글 등록하기 
	 */
	public void replyBoardWrite(BoardVO bvo) {
		System.out.println(bvo.toString());
		sqlSessionTemplate.insert("public.replyBoardWrite",bvo);
	}
	/**
	 * 박현종 6-30 2:34
	 * 제목에 word가 포함되고 현재페이지에 해당하는 
	 *  게시물리스트를 검색
	 */
	public List<BoardVO> searchPublicBoardListByTitleNowPage(HashMap map){
		return sqlSessionTemplate.selectList("public.findPublicBoardListByTitleNowPage",map);
	}
	/**
	 * 박현종 6-30 14:36
	 * 제목에 word가 포함되고 현재페이지가 null일때 
	 * 게시물 리스트를 검색
	 */
	public List<BoardVO> searchPublicBoardListByTitleNullPage(HashMap map){
		return sqlSessionTemplate.selectList("public.findPublicBoardListByTitleNullPage",map);
	}
	/**
	 * 박현종 6-30 15:50
	 * 제목으로 검색한 게시물 숫자 반환 
	 */
	public int findTitleCount(String word){
		return sqlSessionTemplate.selectOne("public.findTitleCount",word);
	}
	/**
	 * 박현종 6-30 16:08
	 * 내용으로 검색한 게시물 숫자 반환 
	 */
	public int findContentCount(String word){
		return sqlSessionTemplate.selectOne("public.findContentCount",word);
	}
	/**
	 * 박현종 6-30 15:09
	 * 제목+내용으로 검색한 게시물 숫자 반환 
	 */
	public int findTitleAndContentCount(String word){
		return sqlSessionTemplate.selectOne("public.findTitleAndContentCount",word);
	}
	/**
	 * 박현종 6-30 16:10
	 * 내용에 word가 포함되고 현재페이지에 해당하는 
	 *  게시물리스트를 검색
	 */
	public List<BoardVO> searchPublicBoardListByContentNowPage(HashMap map){
		return sqlSessionTemplate.selectList("public.findPublicBoardListByContentNowPage",map);
	}
	/**
	 * 박현종 6-30 14:10
	 * 내용에 word가 포함되고 현재페이지가 null일때 
	 * 게시물 리스트를 검색
	 */
	public List<BoardVO> searchPublicBoardListByContentNullPage(HashMap map){
		return sqlSessionTemplate.selectList("public.findPublicBoardListByContentNullPage",map);
	}
	/**
	 * 박현종 6-30 16:31
	 * 제목이나 내용에 word가 포함되고 현재페이지에 해당하는 
	 *  게시물리스트를 검색
	 */
	public List<BoardVO> searchPublicBoardListByTitleAndContentNowPage(HashMap map){
		return sqlSessionTemplate.selectList("public.findPublicBoardListByTitleAndContentNowPage",map);
	}
	/**
	 * 박현종 6-30 14:32
	 * 제목이나 내용에 word가 포함되고 현재페이지가 null일때 
	 * 게시물 리스트를 검색
	 */
	public List<BoardVO> searchPublicBoardListByTitleAndContentNullPage(HashMap map){
		return sqlSessionTemplate.selectList("public.findPublicBoardListByTitleAndContentNullPage",map);
	}
	/**
	 * 박현종 7-01 10:08 
	 * 게시글 수정 페이지에 표현할 내용 조회
	 */
	public BoardVO updatePublicBoardInfo(String no){
		return sqlSessionTemplate.selectOne("public.updatePublicBoardInfo",no);
	}
	/**
	 * 박현종 7-01 16:37
	 * fileNo에 해당하는 파일 DB에서 삭제
	 */
	public void deleteFileByFileNo(String fileNo){
		sqlSessionTemplate.delete("public.deleteFileByFileNo",fileNo);
	}
	/**
	 * 박현종 7-01 16:54
	 * no에 해당하는 게시글 수정
	 */
	public void updatePublicBoard(BoardVO bvo){
		sqlSessionTemplate.update("public.updatePublicBoard",bvo);
	}
	/**
	 * 박현종 7-11 13:56
	 * no에 해당하는 게시글 추천 
	 */
	public void updateLike(String no){
		sqlSessionTemplate.update("public.updateLike",no);
	}
	
}//class
